typora-copy-images-to: img

System类

System类对读者来说并不陌生,因为在之前所学知识中,需要打印结果时,使用的都是“System.out.println();”语句,这句代码中就使用了System类。System类定义了一些与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可。System类的常用方法如下表所示。

1500705950098

1.getProperties()方法

System类的getProperties()方法用于获取当前系统的全部属性,该方法会返回一个Properties对象,其中封装了系统的所有属性,这些属性是以键值对形式存在的。

  1. package cn.itcast.chapter05.example09;
  2. import java.util.*;
  3. /**
  4. * System类的getProperties()方法
  5. */
  6. public class Example09 {
  7. public static void main(String[] args) {
  8. // 获取当前系统属性
  9. Properties properties = System.getProperties();
  10. // 获得所有系统属性的key,返回Enumeration对象
  11. Enumeration propertyNames = properties.propertyNames();
  12. while (propertyNames.hasMoreElements()) {
  13. // 获取系统属性的键key
  14. String key = (String) propertyNames.nextElement();
  15. // 获得当前键key对应的值value
  16. String value = System.getProperty(key);
  17. System.out.println(key + "--->" + value);
  18. }
  19. }
  20. }

2.currentTimeMillis()

currentTimeMillis()方法返回一个long类型的值,该值表示当前时间与1970年1月1日0点0分0秒之间的时间差,单位是毫秒,通常也将该值称作时间戳。

  1. package cn.itcast.chapter05.example10;
  2. /**
  3. * 计算程序在进行求和操作时所消耗的时间
  4. */
  5. public class Example10 {
  6. public static void main(String[] args) {
  7. long startTime = System.currentTimeMillis();// 循环开始时的当前时间
  8. int sum = 0;
  9. for (int i = 0; i < 100000000; i++) {
  10. sum += i;
  11. }
  12. long endTime = System.currentTimeMillis();// 循环结束后的当前时间
  13. System.out.println("程序运行的时间为:" + (endTime - startTime) + "毫秒");
  14. }
  15. }

3.arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

arraycopy()方法用于将一个数组中的元素快速拷贝到另一个数组。其中的参数具体作用如下:

  • src:表示源数组。
  • dest:表示目标数组。
  • srcPos:表示源数组中拷贝元素的起始位置。
  • destPos:表示拷贝到目标数组的起始位置。
  • length:表示拷贝元素的个数。
  1. package cn.itcast.chapter05.example11;
  2. /**
  3. * 数组元素的拷贝
  4. */
  5. public class Example11 {
  6. public static void main(String[] args) {
  7. int[] fromArray = { 101, 102, 103, 104, 105, 106 }; // 源数组
  8. int[] toArray = { 201, 202, 203, 204, 205, 206, 207 }; // 目标数组
  9. System.arraycopy(fromArray, 2, toArray, 3, 4); // 拷贝数组元素
  10. // 打印目标数组中的元素
  11. for (int i = 0; i < toArray.length; i++) {
  12. System.out.println(i + ": " + toArray[i]);
  13. }
  14. }
  15. }

4.SystemClock.uptimeMillis()

Runtime类

Runtime类用于表示虚拟机运行时的状态,它用于封装JVM虚拟机进程。每次使用java命令启动虚拟机都对应一个Runtime实例,并且只有一个实例,因此该类采用单例模式进行设计,对象不可以直接实例化。若想在程序中获得一个Runtime实例,只能通过以下方式:

1500706110171

案例代码

由于Runtime类封装了虚拟机进程,因此,在程序中通常会通过该类的实例对象来获取当前虚拟机的相关信息。

  1. package cn.itcast.chapter05.example12;
  2. /**
  3. * Runtime类的使用
  4. */
  5. public class Example12 {
  6. public static void main(String[] args) {
  7. Runtime rt = Runtime.getRuntime(); // 获取
  8. System.out.println("处理器的个数: " + rt.availableProcessors() + "个");
  9. System.out.println("空闲内存数量: " + rt.freeMemory() / 1024 / 1024 + "M");
  10. System.out.println("最大可用内存数量: " + rt.maxMemory() / 1024 / 1024 + "M");
  11. }
  12. }

案例代码

Runtime类中提供了一个exec()方法,该方法用于执行一个dos命令,从而实现和在命令行窗口中输入dos命令同样的效果。例如,通过运行“notepad.exe”命令打开一个Windows自带的记事本程序

  1. package cn.itcast.chapter05.example13;
  2. import java.io.IOException;
  3. /**
  4. * 使用exec()方法打开记事本
  5. */
  6. public class Example13 {
  7. public static void main(String[] args) throws IOException {
  8. Runtime rt = Runtime.getRuntime(); // 创建Runtime实例对象
  9. rt.exec("notepad.exe"); // 调用exec()方法
  10. }
  11. }

打开记事本并在3秒后自动关闭

  1. package cn.itcast.chapter05.example14;
  2. /**
  3. * 打开的记事本并在3秒后自动关闭
  4. */
  5. public class Example14 {
  6. public static void main(String[] args) throws Exception {
  7. Runtime rt = Runtime.getRuntime(); // 创建一个Runtime实例对象
  8. Process process = rt.exec("notepad.exe");// 得到表示进程的Process对象
  9. Thread.sleep(3000); // 程序休眠3秒
  10. process.destroy(); // 杀掉进程
  11. }
  12. }
  1. Runtime.getRuntime().availableProcessors(); // 获取CPU核心数
  2. Runtime.getRuntime().maxMemory(); // 获取应用被分配的最大内存